package pe.gob.foncodes.spp.bs.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.gob.foncodes.spp.bs.domain.Entidad;

@Repository
public class EntidadDAOImpl extends BaseDAO<Entidad> implements EntidadDAO {

	@Autowired
	public EntidadDAOImpl(SessionFactory sessionFactory) {
		super(sessionFactory);
	}

	public List<Entidad> buscarZonalesFocalizalas(String anho) {

		Entidad entidad;
		List<Entidad> entidades = new ArrayList<Entidad>();
		StringBuilder sql = new StringBuilder();

		sql.append("  SELECT A.COD_ZONAL,Z.TXT_ZONAL ");
		sql.append(" FROM  SGP.ASIGNACION_CCPP A , GEN.ZONAL Z ");
		sql.append(" WHERE A.COD_ZONAL = Z.COD_ZONAL AND A.COD_ANHO = '" + anho
				+ "'");
		sql.append(" AND A.FLG_ACTIVO = 1 ");
		sql.append("  GROUP BY A.COD_ZONAL,Z.TXT_ZONAL ");
		sql.append("  ORDER BY Z.TXT_ZONAL ");

		List<Object> lista = findByNativeQuery(sql);
		Object[] aux;
		for (Object object : lista) {
			aux = (Object[]) object;
			entidad = new Entidad((String) aux[0], (String) aux[1]);
			entidades.add(entidad);
		}

		return entidades;
	}

	public List<Entidad> buscarDepartamentosPorZonalesFocalizalas(String anho,
			String codigoZonal) {

		Entidad entidad;
		List<Entidad> entidades = new ArrayList<Entidad>();
		StringBuilder sql = new StringBuilder();

		sql.append("   SELECT A.COD_DEPARTAMENTO,D.TXT_DEPARTAMENTO ");
		sql.append("  FROM  SGP.ASIGNACION_CCPP A , GEN.DEPARTAMENTO D ");
		sql.append("   WHERE A.COD_DEPARTAMENTO = D.COD_DEPARTAMENTO ");
		sql.append("    AND A.COD_ANHO = '" + anho + "'");
		if (codigoZonal != null && !"".equals(codigoZonal)) {
			sql.append(" AND A.COD_ZONAL = '" + codigoZonal + "'");
		}

		sql.append(" AND A.FLG_ACTIVO = 1 ");
		sql.append(" GROUP BY A.COD_DEPARTAMENTO,D.TXT_DEPARTAMENTO ");
		sql.append(" ORDER BY D.TXT_DEPARTAMENTO ");
		List<Object> lista = findByNativeQuery(sql);
		Object[] aux;
		for (Object object : lista) {
			aux = (Object[]) object;
			entidad = new Entidad((String) aux[0], (String) aux[1]);
			entidades.add(entidad);
		}

		return entidades;
	}

	public List<Entidad> buscarProvinciaPorDepartamentosAndZonalesFocalizalas(
			String anho, String codigoZonal, String codigoDepartamento) {

		Entidad entidad;
		List<Entidad> entidades = new ArrayList<Entidad>();
		StringBuilder sql = new StringBuilder();

		sql.append("   SELECT A.COD_PROVINCIA,P.TXT_PROVINCIA ");
		sql.append(" FROM  SGP.ASIGNACION_CCPP A , GEN.PROVINCIA P ");
		sql.append("   WHERE A.COD_PROVINCIA = P.COD_PROVINCIA AND A.COD_DEPARTAMENTO = P.COD_DEPARTAMENTO ");

		sql.append("    AND A.COD_ANHO = '" + anho + "'");

		if (codigoZonal != null && !"".equals(codigoZonal)) {
			sql.append(" AND A.COD_ZONAL = '" + codigoZonal + "'");
		}

		if (codigoDepartamento != null && !"".equals(codigoDepartamento)) {
			sql.append(" AND A.COD_DEPARTAMENTO = '" + codigoDepartamento + "'");
		}

		sql.append(" AND A.FLG_ACTIVO = 1 ");

		sql.append(" GROUP BY A.COD_PROVINCIA,P.TXT_PROVINCIA ");
		sql.append(" ORDER BY P.TXT_PROVINCIA ");
		List<Object> lista = findByNativeQuery(sql);
		Object[] aux;
		for (Object object : lista) {
			aux = (Object[]) object;
			entidad = new Entidad((String) aux[0], (String) aux[1]);
			entidades.add(entidad);
		}

		return entidades;
	}

	public List<Entidad> buscarDistritoPorProvinciaPorDepartamentosAndZonalesFocalizalas(
			String anho, String codigoZonal, String codigoDepartamento,
			String codigoProvincia) {

		Entidad entidad;
		List<Entidad> entidades = new ArrayList<Entidad>();
		StringBuilder sql = new StringBuilder();

		sql.append("    SELECT A.COD_DISTRITO,D.TXT_DISTRITO ");
		sql.append(" FROM  SGP.ASIGNACION_CCPP A , GEN.DISTRITO D ");
		sql.append("   WHERE A.COD_DISTRITO = D.COD_DISTRITO  AND D.COD_ZONAL = A.COD_ZONAL AND D.COD_DEPARTAMENTO = A.COD_DEPARTAMENTO AND A.COD_PROVINCIA =D.COD_PROVINCIA");

		sql.append("    AND A.COD_ANHO = '" + anho + "'");

		if (codigoZonal != null && !"".equals(codigoZonal)) {
			sql.append(" AND A.COD_ZONAL = '" + codigoZonal + "'");
		}

		if (codigoDepartamento != null && !"".equals(codigoDepartamento)) {
			sql.append(" AND A.COD_DEPARTAMENTO = '" + codigoDepartamento + "'");
		}

		if (codigoProvincia != null && !"".equals(codigoProvincia)) {
			sql.append(" AND A.COD_PROVINCIA = '" + codigoProvincia + "'");
		}

		sql.append(" AND A.FLG_ACTIVO = 1 ");

		sql.append("  GROUP BY  A.COD_DISTRITO,D.TXT_DISTRITO ");
		sql.append(" ORDER BY D.TXT_DISTRITO ");
		List<Object> lista = findByNativeQuery(sql);
		Object[] aux;
		for (Object object : lista) {
			aux = (Object[]) object;
			entidad = new Entidad((String) aux[0], (String) aux[1]);
			entidades.add(entidad);
		}

		return entidades;
	}
}
